package Common;
import Adapter.Adapter;
import Adapter.Ihm;
import Commande.CmdDecrease;
import Commande.CmdIncrease;
import Commande.CmdLire;
import Commande.CmdMarquerMesure;
import Commande.CmdMarquerTemps;
import Commande.CmdStart;
import Commande.CmdStop;
import Commande.Command;
import IHM.Materiel;
import Moteur.Controler;
import Moteur.MoteurImpl;
import Moteur.MoteurMetronome;


public class Metronome {
	

	private Controler controler;
	private Horloge horloge;
	private MoteurMetronome moteur;
	private Command cmdDecrease, cmdIncrease, cmdMarquerMesure, cmdMarquerTemps, cmdStart, cmdStop, cmdLire;
	private Ihm adapter; 
	
	public Metronome(){
		new Materiel();
		moteur = new MoteurImpl();

		adapter = new Adapter();
		controler = new Controler(moteur,adapter);
		
		cmdDecrease = new CmdDecrease(controler);
		cmdIncrease = new CmdIncrease(controler);
		cmdMarquerMesure = new CmdMarquerMesure(controler);
		cmdMarquerTemps = new CmdMarquerTemps(controler);
		cmdStart = new CmdStart(controler);
		cmdStop = new CmdStop(controler);
		cmdLire = new CmdLire(adapter);
		
		moteur.setCmdMarquerMesure(cmdMarquerMesure);
		moteur.setCmdMarquerTemps(cmdMarquerTemps);
		
		adapter.setControler(controler);
		adapter.setCmdStart(cmdStart);
		adapter.setCmdStop(cmdStop);
		adapter.setCmdInc(cmdIncrease);
		adapter.setCmdDec(cmdDecrease);
		
		moteur.add(controler);
		horloge = Materiel.getHorloge();
		horloge.activerPeriodiquement(cmdLire,100);
		
	}
		

}
